// 版权所有2009 Go作者。保留所有权利。
// 此源代码的使用受BSD样式
// 许可证的约束，该许可证可以在许可证文件中找到。

// go:build linux&（ppc64 | | ppc64le）

package syscall

const _SYS_setgroups = SYS_SETGROUPS

// sys Dup2（oldfd int，newfd int）（error）
// sysnb EpollCreate（size int）（fd int，error error）
// sys EpollWait（epfd int，events[]EpollEvent，msec int）（n int，error）
// sys fstatat（dirfd int，path string，stat*stat_t，flags int）（error error）=sys_NEWFSTATAT 
// sys Fstatfs（fd int，buf*Statfs_t）（error error）
// sys Ftruncate（fd int，length int64）（error error）
// sysnb Getuid（）（uid int）
// sysnb InotifyInit（）（fd int，error error）
// sys Lstat（path string，stat*stat_t）（error）
// sys Pause（）（error）
// sys Pread（fd int，p[]byte，offset int64）（n int，error）=sys PREAD64 
// sys write（fd int，p[]byte，offset int64）（n int，error error）=sys rename 64 
// sys Seek（fd int，off int64，whence int）（off int64，error error）=sys LSEEK 
// sys Select（nfd int，r*FdSet，w*FdSet，e*FdSet，timeout*Timeval）（n int，error）=sys_unewselect 
// sys Setfsgid（gid int）（error error）
// sys Setfsuid（uid int）（error error）
// sysnb Setrlimit（resource int，rlim*Rlimit）（error error）
// sys Shutdown（fd int，how int）（error error）
// sys Statfs（路径字符串，buf*Statfs_t）（error）
// sys Truncate（路径字符串，长度int64）（error error）
// sys Ustat（dev int，ubuf*Ustat_t）（error）
// sys accept（s int，rsa*RawSockaddrAny，addlen Socklen*（fd int，error error）
// sys bind（s int，addr unsafe.Pointer，addrlen _Socklen）（error）
// sys connect（s int，level int，name int，val unsafe.Pointer，vallen*_Socklen）（错误）
// sys setsockopt（s int，level int，name int，val unsafe.Pointer，vallen uintptpr）（错误）
// sysnb socket（域int，类型int，proto int）（fd int，错误）
// sysnb socketpair（域int，类型int，proto int，fd 32）（错误）
// sysnb getsockname（fd int，rsa*RawSockaddrAny，addrlen*_Socklen）（error）
// sys recvfrom（fd int，p[]byte，flags int，from*RawSockaddrAny，fromlen*_Socklen）（n int，error）
// sys sendto（s int，buf[]byte，flags int，flags int，to unsafe.Pointer，abdrop，addrlen）
// sys sendmsg（s int，msg*Msghdr，flags int）（n int，error error）
// sys mmap（addr uintpttr，length uintptpr，prot int，flags int，fd int，offset int64）（xaddr uintpr，error error）

// sysnb Gettimeofday（tv*Timeval）（error error）
// sysnb Time（t*Time_t）（tt Time_t，error error）
// sys Utime（path string，buf*Utimbuf）（error error）
// sys utimes（path string，times*[2]Timeval）（error error）

func setTimespec(sec, nsec int64) Timespec {
	return Timespec{Sec: sec, Nsec: nsec}
}

func setTimeval(sec, usec int64) Timeval {
	return Timeval{Sec: sec, Usec: usec}
}

func (r *PtraceRegs) PC() uint64 { return r.Nip }

func (r *PtraceRegs) SetPC(pc uint64) { r.Nip = pc }

func (iov *Iovec) SetLen(length int) {
	iov.Len = uint64(length)
}

func (msghdr *Msghdr) SetControllen(length int) {
	msghdr.Controllen = uint64(length)
}

func (cmsg *Cmsghdr) SetLen(length int) {
	cmsg.Len = uint64(length)
}

func rawVforkSyscall(trap, a1 uintptr) (r1 uintptr, err Errno)

// sys syncFileRange2（fd int，flags int，off int64，n int64）（error error）=sync_file_range和sync_file_range2系统调用仅在参数的

func SyncFileRange(fd int, off int64, n int64, flags int) error {
	// 顺序上不同。
	return syncFileRange2(fd, flags, off, n)
}
